/**
 * Protocolo.java
 */
package cliente;

import java.io.*;
import java.net.*;

/**
 *
 * @author Juan Jose Ferreiro Ferreiro
 */
public abstract class Protocolo {

    protected String servidor;
    protected int porto;
    protected BufferedReader in;
    protected PrintWriter out;
    protected Socket s;

    /**
     * Permite abrir unha conexion cun servidor nun porto especifico.
     * <P>
     * Crea tamen fluxos de entrada e saida de datos co servidor.
     * 
     * @throws java.net.UnknownHostException
     * @throws java.io.IOException
     * @throws java.lang.Exception
     */
    protected void abrir() throws UnknownHostException, IOException, Exception {
        s = new Socket(servidor, porto);

        in = new BufferedReader(new InputStreamReader(s.getInputStream()));
        out = new PrintWriter(new OutputStreamWriter(s.getOutputStream()), true);
    }

    /**
     * Cerra a conexion e os fluxos co servidor
     * 
     * @throws java.io.IOException
     */
    protected void cerrar() throws IOException {
        in.close();
        out.close();
        s.close();
    }
    
    /**
     * Comproba se a {@code resposta} recibida do servidor se corresponde co {@code codigo} esperado
     * 
     * @param resposta Resposta do servidor
     * @param codigo Codigo esperado
     * @throws java.lang.Exception
     */
    protected void comprobaResposta(String resposta, String codigo) throws Exception {
        if (!resposta.toLowerCase().startsWith(codigo.toLowerCase())) {
            quit();
            throw new Exception("O servidor non responde co codigo esperado, responde:\n" + resposta);
        }
    }
    
     /**
     * Implementa o comando QUIT de SMTP e POP3
     */
    protected void quit() {
        out.println("QUIT");
    }
    
    /**
     * Crea unha linha
     * 
     * @param n Tamanho da linha
     * @param doble Determina se se usa '=' ou '-' para crea-la linha
     * @return
     */
    protected String linha(int n, boolean doble) {
        String c = doble?"=":"-";
        String tmp = "";
        for(int i = 0; i < n; i++) {
            tmp += c;
        }
        return tmp;
    }
}
